/*
 * program.h
 *
 *  Created on: 2017-11-23
 *      Author: root
 */

#ifndef PROGRAM_H_
#define PROGRAM_H_


#include <stdio.h>
#include "share_type.h"
#include "database.h"
#include "tcu_can.h"
#include "protocol_meter.h"
#include "protocol_can.h"
#include  "program.h"
#include "include.h"


#ifdef __cplusplus
extern "C"{
#endif
#define OPEN                    1
#define CLOSE                   2
#define DC    1
#define AC    2

#define CTRL_PW_ENABLE
//#define MAIN_VER_NEW  "200606"//为新两枪更新
#define MAIN_VER_NEW  "201119"//为单枪枪更新
//typedef struct{
// unsigned char cur_tr_devNum[6];//BCD 终端机编号  本次交易设备编号
// unsigned char terminal_sernum[4];//脱机交易流水号 终端交易序号
// unsigned char cur_trade_date[7];//BCD  本次交易日期时间
// unsigned char logic_card_Num[8];//逻辑卡号
// unsigned char phy_card_Num[8];//物理卡号
// unsigned int real_money;//实际交易金额 交易金额 以分为单位
// unsigned int org_money;//原交易金额   票价 以分为单位
// unsigned int cur_balance;// 本次余额 以分为单位
// unsigned char tr_type;//交易类型
// unsigned char attach_tr_type;//附加交易类型
// unsigned short recharge_count;//充值交易计数
// unsigned short consum_count;//消费交易计数
// unsigned char addup_mon[2];//计门槛月份
// unsigned char bus_count;//公交门槛计数
// unsigned char subway_count;//地铁门槛计数
// unsigned char  conn_count;//联乘门槛计数
// unsigned char cur_tr_enter_devNum[6];//BCD  本次交易入口设备编号
// unsigned char cur_tr_enter_date[7];//BCD  本次交易入口日期时间
// unsigned char last_tr_devNum[6];//BCD 上次交易设备编号
// unsigned char last_tr_time[4];//BCD  上次交易日期时间MMDDHHMM (24小时制)
// unsigned char area_code;//BCD 区域代码
// unsigned short area_card_type;//BCD 区域卡类型
// unsigned  char area_son_code;//BCD 区域子码
// unsigned char TAC[4];//交易认证码 该域在消费预处理时，返回为4个字节的0x0
//}yct_rf_consum_card;
//#endif
enum CHARGE_FAIL_REASON
{
	MAIN_STOP_FIN=0x40,//主控要求停止
	OVER_TIME_PF01=0x41,//发送充电命令01，等待02命令超时
	OVER_TIME_PE11=0x42,//收到02返回后，等待pf=11超时
	SET_COMB_FAIL=0x43,//共充设置失败
	OVER_TIME_PF03=0x44,//TCU发送停止充电命令控制器返回超时后，但控制器已经停止充电
	OVER_TIME_PF13=0x45,//TCU发送停止充电命令控制器返回超时后，但控制器已经停止充电
	GO_STOP_CHA=0x46,//充电过程中，控制器自行返回待机
};
enum _ERR_CODE
{
	CAN_COMM_ERR1  = 400, //can通信故障—心跳中断
	CAN_COMM_ERR2  =401,//  can通信异常—遥测中断
	CAN_COMM_ERR3  =402  ,//can通信异常—遥信中断
	MT_COMM_ERR=403,//  电表通信故障
	CARD_COMM_ERR=404,//  读卡器异常
	CHA_OVERBACK_PF01=405 ,// 控制器充电指令回应超时
	CHA_OVERBACK_PE11=406,//  控制器充电完成指令超时
	GUN_DISCONN=407,// 枪未连接
    CHA_START_FIN =408 ,// 桩正在充电
    TCU_NOT_READY=409 ,//匹配阶段未完成  桩未准备好
    COMB_DISABLE=410,//  本桩不支持共充或枪编号错误
    CHA_OVERBACK_PF03=411,//  控制器充电停止指令回应超时
    CHA_OVERBACK_PF13=412,//  控制器充电停止完成指令超时
    CHARGE_STOP_UNEXP=413,//  充电意外停止Unexpected  充电过程中，控制器自行返回待机，或等待充电过程中，控制器摇信返回充电完成，但是没有返回启动完成失败帧
    COMB_SET_FAIL=414,// 共充设置失败
    OTHER_ERR=416,// 鉴权失败
    NET_CLOSED=417,//网络中断
    INVALID_MODLE=418,//无效计费模型
    MT_DATA_ERR=419,//电表数据异常


};
enum _CTRL_STATE_
{
	_CTRL_NORMAL_=0,
	_CTRL_COMB_EN_=1,
	_CTRL_PW_EN_=2,
};


enum _ifapp_state_
{
	     _CARD_MODE_=0,
	     _APP_MODE_=1,
	     _VIN_MODE_=2,

	     _IDEL_MODE_CARD_=3,
	     _IDEL_MODE_APP_=4,
	     _IDEL_MODE_VIN=5,

	     _CARD_WAIT_STOP_=6,
	     _APP_WAIT_STOP_=7,
	     _VIN_WAIT_STOP=8

};

enum _msg_save_
{
	_MSG_SAVE_START_=0x55,
	_MSG_SAVE_CHANGE_=0x77,
//	_MSG_SAVE_CHANGE_NODB=0x88,
	_MSG_SAVE_STOP_=0x66,
	_MSG_SAVE_FIN=0xaa,
	_MSG_NULL_=0xff,
};
//
//enum _callback_masfun_type{
//	   xj_callback_type_start_charge = 0,					// 启动充电回调
//    xj_callback_type_stop_charge,                          //停止充电回调
//    xj_callback_type_set_pw,                                     //调节功率回调
//  	xj_callback_type_set_qr,                                     //  设置二维码回调
//};



extern u8 g_msg_save[];
#define TY_INT               0
#define TY_STR                1

typedef struct {
	int firm_id;//公司编号
	int devtype; //1:dc, 2:ac
	int gunnum;
	char  server_ip[64];
	u32 server_port;
	char devNO[32];
    char propertyCode[64];//资产码
	char can_ver[32];//与控制器协议版本号
	u32 MaxV; //最大电压 保留小数点1位
	u32 MaxI;  //最大电流 保留小数点2位
	u32 INMT_baud;
	char INMT_phase_num;//单/三相电
	u32 OUTMT_baud;
	int cannum;
	int mt_portnum;     // 电表数量 
	int ctrlpw_type;
	char ShowStopReason;
	char iflog;//是否将协议日志记录到flash中
	char hardware_ver;//0 通用  1 210  2 600 3 700
	char psam[16];
	TDateTime StartLogDay;
	int logdays;
	char main_ver[6];
#ifdef 	XJ_MQTT_CLIENT
	int mt_ct;//互感器变比
#endif
    char interface_id[12];  // 接口ID，9位数字(16进制)
    char token[20];         // token, 16位数字和字母
}pconf;

//typedef struct {
//	int firm_id;//公司编号
//	int devtype; //1:dc, 2:ac
//	int gunnum;
//	char  server_ip[32];
//	u32 server_port;
//	char devNO[32];
//	char FMt_comno;//第一个抄表485
//	u32 FMt_baud;
//	char phase_num;//单/三相电
//	char can_ver[32];//与控制器协议版本号
//    char propertyCode[64];//资产码
//	u32 MaxV; //最大电压 保留小数点1位
//	u32 MaxI;  //最大电流 保留小数点2位
//	int cannum;
//	int mt_portnum;
//	int gunno_1st;//第一个枪号
//	int gunno_2nt;//第二个枪号
//	unsigned char canaddr1;//第一个can地址
//	unsigned char canaddr2;//第二个can地址
//
//	char SMt_comno;//第二个抄表485端口
//	char FMt_Addr[16];//第一个485地址
//	char SMt_Addr[16];//第二个485地址
//	int ctrlpw_type;
//	char ShowStopReason;
//	char iflog;//是否将协议日志记录到flash中
//	char hardware_ver;//0 通用  1 210  2 600 3 700
//	char psam[16];
//
//}pconf1;
typedef struct {
	int firm_id;//公司编号
	int devtype; //1:dc, 2:ac
	int gunnum;
	char  server_ip[64];
	u32 server_port;
	char devNO[32];
	char FMt_comno;//第一个抄表485
	u32 FMt_baud;
	char phase_num;//单/三相电
	char can_ver[32];//与控制器协议版本号
    char propertyCode[64];//资产码
	u32 MaxV; //最大电压 保留小数点1位
	u32 MaxI;  //最大电流 保留小数点2位
	int cannum;
	int mt_portnum;
	int gunno_1st;//第一个枪号
	int gunno_2nt;//第二个枪号
	unsigned char canaddr1;//第一个can地址
	unsigned char canaddr2;//第二个can地址

	char SMt_comno;//第二个抄表485端口
	char FMt_Addr[16];//第一个485地址
	char SMt_Addr[16];//第二个485地址
	int ctrlpw_type;
	char ShowStopReason;
	char iflog;//是否将协议日志记录到flash中
	char hardware_ver;//0 通用  1 210  2 600 3 700
	int logdays;
	TDateTime StartLogDay;
	char main_ver[6];

#ifdef 	XJ_MQTT_CLIENT
	int mt_ct;//互感器变比
#endif
}pconf1;

typedef struct {
     char name[32];
     u8 typeVal;
     char val[64];
}configPara;
extern pconf *pconfig;

extern chargpile_data *g_uidata;
extern int g_sss[];
extern tran_record g_transaction;
extern u16 g_ser_num;
extern u8  g_ifApp[];
extern char  g_stop_reason[];
extern int g_stop_detail[];
extern u8 card_err_state[];
extern u8 gm_ctrl_state[];
extern char _tmp_print_str[];
//void initChargeRd(void);//
//void saveChargeRd(u32 ser_num);

#ifdef XJ_MQTT_CLIENT
extern tran_record_xj  cur_record[];
#endif
#ifdef NW_CLIENT
extern tran_record cur_record[];
#endif


typedef int (*callbackFun)(u8, void *);

extern callbackFun main_updateYX;
extern callbackFun main_updateYC;
extern callbackFun main_updateMtData;
extern callbackFun main_updateMtDataReal;
extern callbackFun main_FinStartCharge;
extern callbackFun main_FinStopCharge;
extern u32 flag_config;

extern char atoh(int value);
int TCUStartChargeProcess(u8 gunid,u8 ctrltype);
int TCUStopChargeProcess(u8 gunid,u8 stopreason);
int updateStatus2UI(u8 gunid,chargpile_data *ui);
int ReadConf(void *para);
//#ifdef OLD_CONF
//int ReadConf(pconf1 *conf);
//#else
//int ReadConf(pconf *conf);
//#endif
void initcan_main(pconf conf);
//void changeCfg(void);
int initUI(void);
void addtime_main_1s(int interval);
int SavechargeRecord(u8 gunno,u8 type,u8 stop_reason);
int ReadConf1(void *para);
void registerdb(void);
int ModiLogMark(void);
#ifdef __cplusplus
}
#endif
#endif /* PROGRAM_H_ */
